package com.free.dialog;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

/**
 * <p>
 * Title: Eclipse Plugin Development
 * </p>
 * <p>
 * Description: Free download
 * </p>
 * <p>
 * mail: ganshm@gmail.com
 * </p>
 */

public class ChooseFileDialogExample
{
    Display d;
    
    Shell s;
    
    ChooseFileDialogExample()
    {
        d = new Display();
        s = new Shell(d);
        s.setSize(400, 400);
        s.setText("A MessageBox Example");
        // create the menu system
        Menu m = new Menu(s, SWT.BAR); // 添加菜单
        // create a file menu and add an exit item
        final MenuItem file = new MenuItem(m, SWT.CASCADE); // 创建一级菜单File
        file.setText("&File");
        final Menu filemenu = new Menu(s, SWT.DROP_DOWN);
        file.setMenu(filemenu); // 在一级菜单上添加下拉菜单
        final MenuItem openItem = new MenuItem(filemenu, SWT.PUSH);
        openItem.setText("&Open\tCTRL+O");
        openItem.setAccelerator(SWT.CTRL + 'O');
        final MenuItem saveItem = new MenuItem(filemenu, SWT.PUSH);
        saveItem.setText("&Save\tCTRL+S");
        saveItem.setAccelerator(SWT.CTRL + 'S');
        // 菜单分隔线
        final MenuItem separator = new MenuItem(filemenu, SWT.SEPARATOR);
        final MenuItem exitItem = new MenuItem(filemenu, SWT.PUSH);
        exitItem.setText("E&xit");
        
        class Open implements SelectionListener
        {
            public void widgetSelected(SelectionEvent event)
            {
                // 新建文件对话框，并设置为打开的方式
                FileDialog fd = new FileDialog(s, SWT.OPEN);
                // 设置文件对话框的标题
                fd.setText("Open");
                // 设置初始路径
                fd.setFilterPath("C:/");
                // 设置扩展名过滤
                String[] filterExt = {"*.txt", "*.doc", ".rtf", "*.*"};
                fd.setFilterExtensions(filterExt);
                // 打开文件对话框，返回选择的文件
                String selected = fd.open();
                System.out.println(selected);
            }
            
            public void widgetDefaultSelected(SelectionEvent event)
            {
            }
        }
        
        class Save implements SelectionListener
        {
            public void widgetSelected(SelectionEvent event)
            {
                FileDialog fd = new FileDialog(s, SWT.SAVE);
                fd.setText("Save");
                fd.setFilterPath("C:/");
                String[] filterExt = {"*.txt", "*.doc", ".rtf", "*.*"};
                fd.setFilterExtensions(filterExt);
                String selected = fd.open();
                System.out.println(selected);
            }
            
            public void widgetDefaultSelected(SelectionEvent event)
            {
            }
        }
        openItem.addSelectionListener(new Open());
        saveItem.addSelectionListener(new Save());
        
        exitItem.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                MessageBox messageBox = new MessageBox(s, SWT.ICON_QUESTION | SWT.YES | SWT.NO);
                messageBox.setMessage("Do you really want to exit?");
                messageBox.setText("Exiting Application");
                int response = messageBox.open();
                if (response == SWT.YES) // 信息对话框选择了YES
                    System.exit(0);
            }
        });
        s.setMenuBar(m);
        s.open();
        
        while (!s.isDisposed())
        {
            if (!d.readAndDispatch())
                d.sleep();
        }
        d.dispose();
    }
    
    public static void main(String[] argv)
    {
        new ChooseFileDialogExample();
    }
    
}
